<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript面向对象例子</title>
    <script>
        //1.Object.prototype是JavaScript的根对象，所有新对象都是从此原型克隆
        var obj1 = new Object();
        var obj2 = {};
        console.log(Object.getPrototypeOf(obj1) === Object.prototype);
        console.log(Object.getPrototypeOf(obj2) === Object.prototype);

        //2.要得到一个对象，不是通过实例化类，而是找到一个对象作为原型并克隆它
        function Person(name) {
            this.name = name;
        };
        Person.prototype.getName = function () {
            return this.name;
        };
        //这里的Person是一个构造函数，不是类
        var a = new Person('sven');
        console.log(a.name); // 输出： sven
        console.log(a.getName()); // 输出： sven
        console.log(Object.getPrototypeOf(a) === Person.prototype); // 输出： true

        // 3.对象会记住它的原型
        var a = new Object();
        console.log(a.__proto__ === Object.prototype);

        // 4. 如果对象无法响应某个请求，它会把这个请求委托给它的构造器的原型
        var obj = { name: 'sven' };
        var A = function () { };
        A.prototype = obj;
        var b = new A();
        console.log(b.name);

        // 当我们期望得到一个“类”继承自另外一个“类”的效果时，往往会用下面的代码来模拟实现,实现的是B继承于A
        var A = function () { };
        A.prototype = { name: 'sven' };
        var B = function () { };
        B.prototype = new A();
        var b = new B();
        console.log(b.name); // 输出： sven

    </script>
</head>

<body>

</body>

</html>